parity-check matrix
k行n列ですべての行が線形独立な行列Gに対しては、n-k行の線形独立な行からなる$ (n-k,n)行列Hが存在して、Gのrow spaceに属する任意のベクトルがHの行ベクトルと直行し、かつHの行ベクトルに直行するすべてのベクトルがGの行空間に属する。
※要するにGF(2)上のn次元線形空間に対して、Gの行空間に対する直交補空間をとり、その基底を選んでHの行ベクトルとすればよい。
※効率の良い計算方法があったような気もするが忘れた
このHを利用して、線形ブロックコードに対する別な表現を与える:
「n-tuple$ \bold{v}が生成行列$ Gによって生成されるコードワードであるための必要十分条件は、$ \bold{v} \cdot \bold{H}^{T} = \bold{0}であることである。このような$ \bold{H}のことを、コードのパリティチェック行列と呼ぶ。」
このHの行ベクトルの線形結合により得られるものをコードワードとみなすと、それは$ (n, n-k)線形コード$ C_d となる。このコードは$ Gで生成される線形コード$ Cのnull spaceとなっている(=コードワード同士が直交する)。この$ C_dのことを、$ Cのdual code(双対コード)と呼ぶ。
→$ Cのパリティチェック行列は、$ C_dの生成行列に等しい。
$ Hの具体的な形:
$ Gがシステマチックフォーム$ G = (P|I_k)であれば、
$ H = (I_{n-k}|P^T)
となる。
こうすると$ G,Hの行ベクトルどうしは必ず直交する.
すると $ G \cdot H^T = 0がわかる。
また、$ Hの行は線形独立である。
よって、$ Hはパリティチェック行列である。